home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / VILLNS < prev   
Text File  |  1991-05-20  |  12KB  |  529 lines

  1. /* TROLLP-    TROLL FUNCTION */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. logical trollp_(arg)
  11. integer arg;
  12. {
  13.     /* System generated locals */
  14.     logical ret_val;
  15.  
  16.     /* Local variables */
  17.     integer i;
  18.  
  19.     ret_val = TRUE_;
  20. /*                         !ASSUME WINS. */
  21.     if (prsvec_1.prsa != vindex_1.fightw) {
  22.     goto L1100;
  23.     }
  24. /*                         !FIGHT? */
  25.     if (objcts_1.ocan[oindex_1.axe - 1] == oindex_1.troll) {
  26.     goto L10;
  27.     }
  28. /*                         !GOT AXE?  NOTHING. */
  29.     i = 433;
  30. /*                         !ASSUME CANT GET. */
  31.     if (! qhere_(oindex_1.axe, play_1.here)) {
  32.     goto L1050;
  33.     }
  34. /*                         !HERE? */
  35.     i = 434;
  36. /*                         !YES, RECOVER. */
  37.     newsta_(oindex_1.axe, 0, 0, oindex_1.troll, 0);
  38. L1050:
  39.     if (qhere_(oindex_1.troll, play_1.here)) {
  40.     rspeak_(i);
  41.     }
  42. /*                         !IF PLAYER HERE. */
  43.     return ret_val;
  44.  
  45. L1100:
  46.     if (prsvec_1.prsa != vindex_1.deadxw) {
  47.     goto L1200;
  48.     }
  49. /*                         !DEAD? */
  50.     findex_1.trollf = TRUE_;
  51. /*                         !PERMIT EXITS. */
  52.     return ret_val;
  53.  
  54. L1200:
  55.     if (prsvec_1.prsa != vindex_1.outxw) {
  56.     goto L1300;
  57.     }
  58. /*                         !OUT? */
  59.     findex_1.trollf = TRUE_;
  60. /*                         !PERMIT EXITS. */
  61.     objcts_1.oflag1[oindex_1.axe - 1] &= ~ VISIBT;
  62.     objcts_1.odesc1[oindex_1.troll - 1] = 435;
  63. /*                         !TROLL OUT. */
  64.     return ret_val;
  65.  
  66. L1300:
  67.     if (prsvec_1.prsa != vindex_1.inxw) {
  68.     goto L1400;
  69.     }
  70. /*                         !WAKE UP? */
  71.     findex_1.trollf = FALSE_;
  72. /*                         !FORBID EXITS. */
  73.     objcts_1.oflag1[oindex_1.axe - 1] |= VISIBT;
  74.     objcts_1.odesc1[oindex_1.troll - 1] = 436;
  75. /*                         !TROLL IN. */
  76.     if (qhere_(oindex_1.troll, play_1.here)) {
  77.     rspeak_(437);
  78.     }
  79.     return ret_val;
  80.  
  81. L1400:
  82.     if (prsvec_1.prsa != vindex_1.frstqw) {
  83.     goto L1500;
  84.     }
  85. /*                         !FIRST ENCOUNTER? */
  86.     ret_val = prob_(33, 66);
  87. /*                         !33% TRUE UNLESS BADLK. */
  88.     return ret_val;
  89.  
  90. L1500:
  91.     if (prsvec_1.prsa != vindex_1.movew && prsvec_1.prsa != vindex_1.takew && 
  92.         prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != 
  93.         vindex_1.throww && prsvec_1.prsa != vindex_1.givew) {
  94.     goto L2000;
  95.     }
  96.     if (objcts_1.ocapac[oindex_1.troll - 1] >= 0) {
  97.     goto L1550;
  98.     }
  99. /*                         !TROLL OUT? */
  100.     objcts_1.ocapac[oindex_1.troll - 1] = -objcts_1.ocapac[oindex_1.troll - 1]
  101.         ;
  102. /*                         !YES, WAKE HIM. */
  103.     objcts_1.oflag1[oindex_1.axe - 1] |= VISIBT;
  104.     findex_1.trollf = FALSE_;
  105.     objcts_1.odesc1[oindex_1.troll - 1] = 436;
  106.     rspeak_(437);
  107.  
  108. L1550:
  109.     if (prsvec_1.prsa != vindex_1.takew && prsvec_1.prsa != vindex_1.movew) {
  110.     goto L1600;
  111.     }
  112.     rspeak_(438);
  113. /*                         !JOKE. */
  114.     return ret_val;
  115.  
  116. L1600:
  117.     if (prsvec_1.prsa != vindex_1.mungw) {
  118.     goto L1700;
  119.     }
  120. /*                         !MUNG? */
  121.     rspeak_(439);
  122. /*                         !JOKE. */
  123.     return ret_val;
  124.  
  125. L1700:
  126.     if (prsvec_1.prso == 0) {
  127.     goto L10;
  128.     }
  129. /*                         !NO OBJECT? */
  130.     i = 440;
  131. /*                         !ASSUME THROW. */
  132.     if (prsvec_1.prsa == vindex_1.givew) {
  133.     i = 441;
  134.     }
  135. /*                         !GIVE? */
  136.     rspsub_(i, objcts_1.odesc2[prsvec_1.prso - 1]);
  137. /*                         !TROLL TAKES. */
  138.     if (prsvec_1.prso == oindex_1.knife) {
  139.     goto L1900;
  140.     }
  141. /*                         !OBJ KNIFE? */
  142.     newsta_(prsvec_1.prso, 442, 0, 0, 0);
  143. /*                         !NO, EATS IT. */
  144.     return ret_val;
  145.  
  146. L1900:
  147.     rspeak_(443);
  148. /*                         !KNIFE, THROWS IT BACK */
  149.     objcts_1.oflag2[oindex_1.troll - 1] |= FITEBT;
  150.     return ret_val;
  151.  
  152. L2000:
  153.     if (! findex_1.trollf || prsvec_1.prsa != vindex_1.hellow) {
  154.     goto L10;
  155.     }
  156.     rspeak_(366);
  157. /*                         !TROLL OUT. */
  158.     return ret_val;
  159.  
  160. L10:
  161.     ret_val = FALSE_;
  162. /*                         !COULDNT HANDLE IT. */
  163.     return ret_val;
  164. } /* trollp_ */
  165.  
  166. /* CYCLOP-    CYCLOPS FUNCTION */
  167.  
  168. /* DECLARATIONS */
  169.  
  170. logical cyclop_(arg)
  171. integer arg;
  172. {
  173.     /* System generated locals */
  174.     integer i__1, i__2;
  175.     logical ret_val;
  176.  
  177.     /* Local variables */
  178.     integer i;
  179.  
  180.     ret_val = TRUE_;
  181. /*                         !ASSUME WINS. */
  182.     if (! findex_1.cyclof) {
  183.     goto L100;
  184.     }
  185. /*                         !ASLEEP? */
  186.     if (prsvec_1.prsa != vindex_1.alarmw && prsvec_1.prsa != vindex_1.mungw &&
  187.          prsvec_1.prsa != vindex_1.hellow && prsvec_1.prsa != 
  188.         vindex_1.burnw && prsvec_1.prsa != vindex_1.killw && 
  189.         prsvec_1.prsa != vindex_1.attacw) {
  190.     goto L10;
  191.     }
  192.     findex_1.cyclof = FALSE_;
  193. /*                         !WAKE CYCLOPS. */
  194.     rspeak_(187);
  195. /*                         !DESCRIBE. */
  196.     findex_1.rvcyc = abs(findex_1.rvcyc);
  197.     objcts_1.oflag2[oindex_1.cyclo - 1] = (objcts_1.oflag2[oindex_1.cyclo - 1]
  198.          | FITEBT) & ~ SLEPBT;
  199.     return ret_val;
  200.  
  201. L100:
  202.     if (prsvec_1.prsa == vindex_1.fightw || prsvec_1.prsa == vindex_1.frstqw) 
  203.         {
  204.     goto L10;
  205.     }
  206.     if (abs(findex_1.rvcyc) <= 5) {
  207.     goto L200;
  208.     }
  209. /*                         !ANNOYED TOO MUCH? */
  210.     findex_1.rvcyc = 0;
  211. /*                         !RESTART COUNT. */
  212.     jigsup_(188);
  213. /*                         !YES, EATS PLAYER. */
  214.     return ret_val;
  215.  
  216. L200:
  217.     if (prsvec_1.prsa != vindex_1.givew) {
  218.     goto L500;
  219.     }
  220. /*                         !GIVE? */
  221.     if (prsvec_1.prso != oindex_1.food || findex_1.rvcyc < 0) {
  222.     goto L300;
  223.     }
  224. /*                         !FOOD WHEN HUNGRY? */
  225.     newsta_(oindex_1.food, 189, 0, 0, 0);
  226. /*                         !EATS PEPPERS. */
  227. /* Computing MIN */
  228.     i__1 = -1, i__2 = -findex_1.rvcyc;
  229.     findex_1.rvcyc = min(i__1,i__2);
  230. /*                         !GETS THIRSTY. */
  231.     return ret_val;
  232.  
  233. L300:
  234.     if (prsvec_1.prso != oindex_1.water) {
  235.     goto L400;
  236.     }
  237. /*                         !DRINK WHEN THIRSTY? */
  238.     if (findex_1.rvcyc >= 0) {
  239.     goto L350;
  240.     }
  241.     newsta_(prsvec_1.prso, 190, 0, 0, 0);
  242. /*                         !DRINKS AND */
  243.     findex_1.cyclof = TRUE_;
  244. /*                         !FALLS ASLEEP. */
  245.     objcts_1.oflag2[oindex_1.cyclo - 1] = (objcts_1.oflag2[oindex_1.cyclo - 1]
  246.          | SLEPBT) & ~ FITEBT;
  247.     return ret_val;
  248.  
  249. L350:
  250.     rspeak_(191);
  251. /*                         !NOT THIRSTY. */
  252. L10:
  253.     ret_val = FALSE_;
  254. /*                         !FAILS. */
  255.     return ret_val;
  256.  
  257. L400:
  258.     i = 192;
  259. /*                         !ASSUME INEDIBLE. */
  260.     if (prsvec_1.prso == oindex_1.garli) {
  261.     i = 193;
  262.     }
  263. /*                         !GARLIC IS JOKE. */
  264. L450:
  265.     rspeak_(i);
  266. /*                         !DISDAIN IT. */
  267.     if (findex_1.rvcyc < 0) {
  268.     --findex_1.rvcyc;
  269.     }
  270.     if (findex_1.rvcyc >= 0) {
  271.     ++findex_1.rvcyc;
  272.     }
  273.     if (! findex_1.cyclof) {
  274.     i__1 = abs(findex_1.rvcyc) + 193;
  275.     rspeak_(i__1);
  276.     }
  277.     return ret_val;
  278.  
  279. L500:
  280.     i = 0;
  281. /*                         !ASSUME NOT HANDLED. */
  282.     if (prsvec_1.prsa == vindex_1.hellow) {
  283.     goto L450;
  284.     }
  285. /*                         !HELLO IS NO GO. */
  286.     if (prsvec_1.prsa == vindex_1.throww || prsvec_1.prsa == vindex_1.mungw) {
  287.  
  288.     i = rnd_(2) + 200;
  289.     }
  290.     if (prsvec_1.prsa == vindex_1.takew) {
  291.     i = 202;
  292.     }
  293.     if (prsvec_1.prsa == vindex_1.tiew) {
  294.     i = 203;
  295.     }
  296.     if (i <= 0) {
  297.     goto L10;
  298.     } else {
  299.     goto L450;
  300.     }
  301. /*                         !SEE IF HANDLED. */
  302.  
  303. } /* cyclop_ */
  304.  
  305. /* THIEFP-    THIEF FUNCTION */
  306.  
  307. /* DECLARATIONS */
  308.  
  309. logical thiefp_(arg)
  310. integer arg;
  311. {
  312.     /* System generated locals */
  313.     integer i__1;
  314.     logical ret_val;
  315.  
  316.     /* Local variables */
  317.     integer i, j;
  318.  
  319.     ret_val = TRUE_;
  320. /*                         !ASSUME WINS. */
  321.     if (prsvec_1.prsa != vindex_1.fightw) {
  322.     goto L100;
  323.     }
  324. /*                         !FIGHT? */
  325.     if (objcts_1.ocan[oindex_1.still - 1] == oindex_1.thief) {
  326.     goto L10;
  327.     }
  328. /*                         !GOT STILLETTO?  F. */
  329.     if (qhere_(oindex_1.still, hack_1.thfpos)) {
  330.     goto L50;
  331.     }
  332. /*                         !CAN HE RECOVER IT? */
  333.     newsta_(oindex_1.thief, 0, 0, 0, 0);
  334. /*                         !NO, VANISH. */
  335.     if (qhere_(oindex_1.thief, play_1.here)) {
  336.     rspeak_(498);
  337.     }
  338. /*                         !IF HERO, TELL. */
  339.     return ret_val;
  340.  
  341. L50:
  342.     newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
  343. /*                         !YES, RECOVER. */
  344.     if (qhere_(oindex_1.thief, play_1.here)) {
  345.     rspeak_(499);
  346.     }
  347. /*                         !IF HERO, TELL. */
  348.     return ret_val;
  349.  
  350. L100:
  351.     if (prsvec_1.prsa != vindex_1.deadxw) {
  352.     goto L200;
  353.     }
  354. /*                         !DEAD? */
  355.     hack_1.thfact = FALSE_;
  356. /*                         !DISABLE DEMON. */
  357.     objcts_1.oflag1[oindex_1.chali - 1] |= TAKEBT;
  358.     j = 0;
  359.     i__1 = objcts_1.olnt;
  360.     for (i = 1; i <= i__1; ++i) {
  361. /*                         !CARRYING ANYTHING? */
  362. /* L125: */
  363.     if (objcts_1.oadv[i - 1] == -oindex_1.thief) {
  364.         j = 500;
  365.     }
  366.     }
  367.     rspeak_(j);
  368. /*                         !TELL IF BOOTY REAPPEARS. */
  369.  
  370.     j = 501;
  371.     i__1 = objcts_1.olnt;
  372.     for (i = 1; i <= i__1; ++i) {
  373. /*                         !LOOP. */
  374.     if (i == oindex_1.chali || i == oindex_1.thief || play_1.here != 
  375.         rindex_1.treas || ! qhere_(i, play_1.here)) {
  376.         goto L135;
  377.     }
  378.     objcts_1.oflag1[i - 1] |= VISIBT;
  379.     rspsub_(j, objcts_1.odesc2[i - 1]);
  380. /*                         !DESCRIBE. */
  381.     j = 502;
  382.     goto L150;
  383.  
  384. L135:
  385.     if (objcts_1.oadv[i - 1] == -oindex_1.thief) {
  386.         newsta_(i, 0, play_1.here, 0, 0);
  387.     }
  388. L150:
  389.     ;
  390.     }
  391.     return ret_val;
  392.  
  393. L200:
  394.     if (prsvec_1.prsa != vindex_1.frstqw) {
  395.     goto L250;
  396.     }
  397. /*                         !FIRST ENCOUNTER? */
  398.     ret_val = prob_(20, 75);
  399.     return ret_val;
  400.  
  401. L250:
  402.     if (prsvec_1.prsa != vindex_1.hellow || objcts_1.odesc1[oindex_1.thief - 
  403.         1] != 504) {
  404.     goto L300;
  405.     }
  406.     rspeak_(626);
  407.     return ret_val;
  408.  
  409. L300:
  410.     if (prsvec_1.prsa != vindex_1.outxw) {
  411.     goto L400;
  412.     }
  413. /*                         !OUT? */
  414.     hack_1.thfact = FALSE_;
  415. /*                         !DISABLE DEMON. */
  416.     objcts_1.odesc1[oindex_1.thief - 1] = 504;
  417. /*                         !CHANGE DESCRIPTION. */
  418.     objcts_1.oflag1[oindex_1.still - 1] &= ~ VISIBT;
  419.     objcts_1.oflag1[oindex_1.chali - 1] |= TAKEBT;
  420.     return ret_val;
  421.  
  422. L400:
  423.     if (prsvec_1.prsa != vindex_1.inxw) {
  424.     goto L500;
  425.     }
  426. /*                         !IN? */
  427.     if (qhere_(oindex_1.thief, play_1.here)) {
  428.     rspeak_(505);
  429.     }
  430. /*                         !CAN HERO SEE? */
  431.     hack_1.thfact = TRUE_;
  432. /*                         !ENABLE DEMON. */
  433.     objcts_1.odesc1[oindex_1.thief - 1] = 503;
  434. /*                         !CHANGE DESCRIPTION. */
  435.     objcts_1.oflag1[oindex_1.still - 1] |= VISIBT;
  436.     if (play_1.here == rindex_1.treas && qhere_(oindex_1.chali, play_1.here)
  437.         ) {
  438.     objcts_1.oflag1[oindex_1.chali - 1] &= ~ TAKEBT;
  439.     }
  440.     return ret_val;
  441.  
  442. L500:
  443.     if (prsvec_1.prsa != vindex_1.takew) {
  444.     goto L600;
  445.     }
  446. /*                         !TAKE? */
  447.     rspeak_(506);
  448. /*                         !JOKE. */
  449.     return ret_val;
  450.  
  451. L600:
  452.     if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prso != oindex_1.knife ||
  453.          (objcts_1.oflag2[oindex_1.thief - 1] & FITEBT) != 0) {
  454.     goto L700;
  455.     }
  456.     if (prob_(10, 10)) {
  457.     goto L650;
  458.     }
  459. /*                         !THREW KNIFE, 10%? */
  460.     rspeak_(507);
  461. /*                         !NO, JUST MAKES */
  462.     objcts_1.oflag2[oindex_1.thief - 1] |= FITEBT;
  463.     return ret_val;
  464.  
  465. L650:
  466.     j = 508;
  467. /*                         !THIEF DROPS STUFF. */
  468.     i__1 = objcts_1.olnt;
  469.     for (i = 1; i <= i__1; ++i) {
  470.     if (objcts_1.oadv[i - 1] != -oindex_1.thief) {
  471.         goto L675;
  472.     }
  473. /*                         !THIEF CARRYING? */
  474.     j = 509;
  475.     newsta_(i, 0, play_1.here, 0, 0);
  476. L675:
  477.     ;
  478.     }
  479.     newsta_(oindex_1.thief, j, 0, 0, 0);
  480. /*                         !THIEF VANISHES. */
  481.     return ret_val;
  482.  
  483. L700:
  484.     if (prsvec_1.prsa != vindex_1.throww && prsvec_1.prsa != vindex_1.givew ||
  485.          prsvec_1.prso == 0 || prsvec_1.prso == oindex_1.thief) {
  486.     goto L10;
  487.     }
  488.     if (objcts_1.ocapac[oindex_1.thief - 1] >= 0) {
  489.     goto L750;
  490.     }
  491. /*                         !WAKE HIM UP. */
  492.     objcts_1.ocapac[oindex_1.thief - 1] = -objcts_1.ocapac[oindex_1.thief - 1]
  493.         ;
  494.     hack_1.thfact = TRUE_;
  495.     objcts_1.oflag1[oindex_1.still - 1] |= VISIBT;
  496.     objcts_1.odesc1[oindex_1.thief - 1] = 503;
  497.     rspeak_(510);
  498.  
  499. L750:
  500.     if (prsvec_1.prso != oindex_1.brick || objcts_1.ocan[oindex_1.fuse - 1] !=
  501.          oindex_1.brick || cevent_1.ctick[cindex_1.cevfus - 1] == 0) {
  502.     goto L800;
  503.     }
  504.     rspeak_(511);
  505. /*                         !THIEF REFUSES BOMB. */
  506.     return ret_val;
  507.  
  508. L800:
  509.     i__1 = -oindex_1.thief;
  510.     newsta_(prsvec_1.prso, 0, 0, 0, i__1);
  511. /*                         !THIEF TAKES GIFT. */
  512.     if (objcts_1.otval[prsvec_1.prso - 1] > 0) {
  513.     goto L900;
  514.     }
  515. /*                         !A TREASURE? */
  516.     rspsub_(512, objcts_1.odesc2[prsvec_1.prso - 1]);
  517.     return ret_val;
  518.  
  519. L900:
  520.     rspsub_(627, objcts_1.odesc2[prsvec_1.prso - 1]);
  521. /*                         !THIEF ENGROSSED. */
  522.     findex_1.thfenf = TRUE_;
  523.     return ret_val;
  524.  
  525. L10:
  526.     ret_val = FALSE_;
  527.     return ret_val;
  528. } /* thiefp_ */
  529.